package com.atcc.test.designmodel.singleton;

/**
 * 
 * 懒汉式单例模式   DCL懒汉式
 * @author Administrator
 * 可以用反射暴力破解
 *
 */
public class LazySingleTon {
	
	private LazySingleTon() {
		System.out.println(Thread.currentThread().getName());
	}
	
	private static volatile LazySingleTon lazySingleTon;
	
	public static LazySingleTon getIntance() {
		if(lazySingleTon == null) {
			synchronized(LazySingleTon.class) {
				if(lazySingleTon == null) {
					lazySingleTon = new LazySingleTon();
					/**
					 * 1、分配内存空间
					 * 2、执行构造方法，初始化对象
					 * 3、将对象指向内存空间
					 * 如果不设置为volatile,发生指令重排，当13先执行的时候，此时的内存空间
					 * 的值是初始化空间的零值，其他线程进去的时，第一层判断不为空，
					 * 则直接返回lazySingleTon，就会造成错误。
					 * 
					 */
				}
			}
		}
		return lazySingleTon;
	}

}
